import axios from 'axios'
import store from '@/store'
import {API_SERVER_URL} from "../common/const";

export function request(config) {
  const instance = axios.create({
    // baseURL: 'http://localhost:9090',
    baseURL: API_SERVER_URL,
    // timeout: 5000
  })

  // 请求拦截器
  instance.interceptors.request.use(config => {
    if (store.state.token) {
      config.headers['Authorization'] = `Bearer ${store.state.token}`
    }
    /*
     *  return config代表放行后续操作
     **/
    return config
  },err => {
    console.log(err);
  })

  // 响应拦截器
  instance.interceptors.response.use(res => {
    return res.data
  }, err => {
    console.log(err);
  })

  // 发送网络请求
  return instance(config)  // 返回Promise实例
}

export function requestAll (promiseArray) {

  // 这个其实可以直接axios.all(promiseArray)，为何需要再增加一层Promise？

  // 这里是有原因的：

  // 1、如果直接axios.all(promiseArray)，请求成功或失败的处理是交由使用者

  // 2、这里封装多一层Promise，是便于此处封装时考虑添加公共处理如开启遮罩层关闭遮罩层，之后才抛出调用结果给调用方，而不应该由调用方赖关闭遮罩层

  return new Promise((resolve, reject) => {

    axios.all(promiseArray)

      .then(allResponse => {

        resolve(allResponse)

      })

      .catch((error) => {

        reject(error)

      })

  })

}